Scroll to navigation

UTIME(2) Linux Programmer's Manual UTIME(2)

名前

utime, utimes - ファイルの最終アクセス時刻と修正時刻を変更する

書式

#include <sys/types.h>

#include <utime.h> int utime(const char *filename, const struct utimbuf *times); #include <sys/time.h> int utimes(const char *filename, const struct timeval times[2]);

説明

utime() システムコールは filename で示される inode のアクセス時刻と修正時刻を times 中の actimemodtime にそれぞれ変更する。

timesNULL の場合、ファイルのアクセス時刻と修正時刻は現在の時刻に設定される。

タイムスタンプの変更は以下のいずれかの場合に許可される。 プロセスに適切な特権がある場合、 実効 (effective) ユーザ ID がファイルのユーザ ID と等しい場合、 times が NULL かつ、プロセスがファイルへの書き込み許可を持っている場合。

構造体 utimbuf は以下に示すようになっている。


struct utimbuf {

time_t actime; /* アクセス時刻 */
time_t modtime; /* 修正時刻 */ };

utime() システムコールは 1 秒の分解能でタイムスタンプを指定することができる。

utimes() は utime() と同様であるが、 times 引き数が構造体ではなく配列を参照する。 この配列の要素は timeval 構造体で、タイムスタンプの指定を 1 マイクロ秒の分解能で行うことができる。 構造体 timeval は以下に示す通りである。


struct timeval {

long tv_sec; /* 秒 */
long tv_usec; /* マイクロ秒 */ };

times[0] は新しいアクセス時刻を、 times[1] は新しい修正時刻を規定する。 times が NULL の場合、 utime() 同様、ファイルのアクセス時刻と修正時刻は現在の時刻に設定される。

返り値

成功した場合 0 が返る。失敗した場合 -1 が返り、 errno がエラーの内容に従って設定される。

エラー

path を構成する何れかのディレクトリに検索許可がない (path_resolution(7) も参照すること)。
times が NULL である。 または、呼び出し元の実効ユーザ ID がファイルの所有者と一致しない。 または、呼び出し元がそのファイルへの書き込み許可を持たず、 特権も持っていない (Linux の場合、ケーパビリティ CAP_DAC_OVERRIDECAP_FOWNER も持っていない)。または、
filename が存在しない。
times が NULL でなく、かつ呼び出し元の実効 UID がファイルの所有者と一致せず、 かつ呼び出し元が特権を持っていない (Linux の場合、ケーパビリティ CAP_FOWNER を持っていない)。
path が読み込み専用のファイルシステム上にある。

準拠

utime(): SVr4, POSIX.1-2001. POSIX.1-2008 は utime() を廃止予定としている。
utimes(): 4.3BSD, POSIX.1-2001.

注意

Linux では、不変 (immutable) ファイルのタイムスタンプを変更したり、 追加専用 (append-only) のファイルに現在時刻以外のタイムスタンプを 設定したりすることは、許可されていない。

libc4 と libc5 では、 utimes() は単に utime() のラッパー (wrapper) である。 そのため秒以下を指定することはできない。

関連項目

chattr(1), futimesat(2), stat(2), utimensat(2), futimes(3), futimens(3)

2008-08-06 Linux